package com.example.liuke.guangguang.db.dbuntils;

import android.content.Context;

import com.example.liuke.guangguang.bean.User;
import com.example.liuke.guangguang.db.UserDao;

import org.greenrobot.greendao.query.QueryBuilder;

import java.util.List;

/**
 * Created by liuke on 2018/9/17.
 */

public class DaoOpe {

    /**
     * 添加数据至数据库
     *
     * @param context
     * @param stu
     */
    public static void insertData(Context context, User stu) {
        DbManager.getDaoSession(context).getUserDao().insert(stu);
    }


    /**
     * 将数据实体通过事务添加至数据库
     *
     * @param context
     * @param list
     */
    public static void insertData(Context context, List<User> list) {
        if (null == list || list.size() <= 0) {
            return;
        }
        DbManager.getDaoSession(context).getUserDao().insertInTx(list);
    }

    /**
     * 添加数据至数据库，如果存在，将原来的数据覆盖
     * 内部代码判断了如果存在就update(entity);不存在就insert(entity)；
     *
     * @param context
     * @param student
     */
    public static void saveData(Context context, User student) {
        DbManager.getDaoSession(context).getUserDao().save(student);
    }

    /**
     * 删除数据至数据库
     *
     * @param context
     * @param student 删除具体内容
     */
    public static void deleteData(Context context, User student) {
        DbManager.getDaoSession(context).getUserDao().delete(student);
    }

    /**
     * 根据id删除数据至数据库
     *
     * @param context
     * @param id      删除具体内容
     */
    public static void deleteByKeyData(Context context, long id) {
        DbManager.getDaoSession(context).getUserDao().deleteByKey(id);
    }

    /**
     * 删除全部数据
     *
     * @param context
     */
    public static void deleteAllData(Context context) {
        DbManager.getDaoSession(context).getUserDao().deleteAll();
    }

    /**
     * 更新数据库
     *
     * @param context
     * @param student
     */
    public static void updateData(Context context, User student) {
        DbManager.getDaoSession(context).getUserDao().update(student);
    }

    /**
     * 查询所有数据
     *
     * @param context
     * @return
     */
    public static List<User> queryAll(Context context) {
        QueryBuilder<User> builder = DbManager.getDaoSession(context).getUserDao().queryBuilder();

        return builder.build().list();
    }


    /**
     * 分页加载
     *
     * @param context
     * @param pageSize 当前第几页(程序中动态修改pageSize的值即可)
     * @param pageNum  每页显示多少个
     * @return
     */
    public static List<User> queryPaging(int pageSize, int pageNum, Context context) {
        UserDao studentDao = DbManager.getDaoSession(context).getUserDao();
        List<User> listMsg = studentDao.queryBuilder()
                .offset(pageSize * pageNum).limit(pageNum).list();
        return listMsg;
    }

    /**
     * 条件查询
     * qe等于 le小于等于 ge大于等于 between区间包含区间边 limit查询数量限制
     * @author liuke
     * @time 2018/9/18 8:40  试试不定参数 或者笨方法就是循环查 智能循环查了
     */
    public static List<User> queryconditions(Context context) {
        QueryBuilder<User> builder = DbManager.getDaoSession(context).getUserDao().queryBuilder();
        return builder.whereOr(UserDao.Properties.Id.between(1052, 1082),UserDao.Properties.Id.between(1088, 1090)).build().list();
    }

    /**
     * 修改指定数据
     * update方式
     * @author liuke
     * @time 2018/9/18 9:57
     */
    public static void update(Context context) {
        List<User> list = queryconditions(context);
        for (int i = 0; i < list.size(); i++) {
            list.get(i).setUsername("修改" + i);
        }
        DbManager.getDaoSession(context).getUserDao().updateInTx(list);
    }

    /**
     * 修改指定数据
     * insertOrReplaceInTx方式
     * @author liuke
     * @time 2018/9/18 13:38
     */
    public  static  void update2(Context context){
        List<User> list = queryconditions(context);
        for (int i = 0; i < list.size(); i++) {
            list.get(i).setUsername("修改insertOrReplaceInTx方式" + i);
        }
        DbManager.getDaoSession(context).getUserDao().insertOrReplaceInTx(list);
    }
}
